package com.多线程.ThreadSafe;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 1.定义一个账户类，创建一个账户对象（表示小明和小红的共同账号）
 */

public class Account_lock {
    private String id;
    private int money;
    //创建一个锁,并把锁声明为静态的,锁是唯一，不可替换的
    private static final Lock lock=new ReentrantLock();

    public Account_lock() {
    }

    public Account_lock(int money) {
        this.money = money;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public void drawMoney(int money) {
        //获取线程名来判断是谁来取钱了
        String name=Thread.currentThread().getName();
        //使用Lock锁解决线程安全问题
        //上锁
        lock.lock();
        try {
            if (this.money>=money){
                System.out.println(name+"来取了"+money+"钱");
                this.money-=money;
                System.out.println("账户余额："+this.money);
            }else{
                System.out.println("账户没有那么多钱");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //最后一定要解锁，不然会死锁
            lock.unlock();
        }
    }



}
